USE [NANS21V]
GO

/****** オブジェクト: Table Valued Function [dbo].[Rcomment] スクリプト日付: 2014/05/09 15:58:51 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Rcomment]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[Rcomment]
GO

USE [NANS21V]
GO

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Rcomment]
(
	@TAIKAINO int,
	@KYOGINO int,
	@ROUNDNO int,
	@SUBNO int
)
RETURNS @retTBL TABLE 
(
RCOMMENT VARCHAR(max) NULL
)
AS
BEGIN
DECLARE @CUR_A CURSOR ;  -- SELECTのカーソル
DECLARE @str_s int ;     -- 文字列切り出し開始位置
DECLARE @str_e int ;     -- 文字列切り出し終了位置
DECLARE @str as varchar(max) ; -- SELECTした列の値を格納
DECLARE @buf as varchar(max) ; -- 分割した文字列を格納
DECLARE @SEP as char(1) ; --セパレータ文字

SET @SEP = ',' ;

-- カーソル設定 および オープン
SET @CUR_A =  CURSOR FOR SELECT X.RCOMMENT 
FROM (SELECT DISTINCT(dbo.CommentCodeConvert(RE.RCOMMENT,LA.SYUKKETU)) AS RCOMMENT
	  FROM TBL_LANE AS LA 
		LEFT OUTER JOIN (
		  SELECT LA.LANE, 
				 RE.KIROKU, 
				 RE.EXTEND1, 
				 RE.JYUNI, 
				 RE.EXTEND3, 
				 RE.RCOMMENT, 
				 RE.PLUS, 
				 RE.RANK, 
				 RE.SANKOKIROKU, 
				 RE.EXTEND2, 
				 RE.EXTEND4, 
				 RE.EXTEND5 
			FROM TBL_LANE AS LA, 
				 TBL_RESULT AS RE 
			WHERE LA.TAIKAINO = RE.TAIKAINO 
			  AND LA.KYOGINO = RE.KYOGINO 
			  AND LA.SUBNO = RE.SUBNO 
			  AND LA.ROUNDNO = RE.ROUNDNO 
			  AND LA.KUMINO = RE.KUMINO 
			  AND LA.LANE = RE.LANE 
			  AND LA.TAIKAINO = @TAIKAINO
			  AND LA.KYOGINO = @KYOGINO
			  AND LA.ROUNDNO = @ROUNDNO
			  AND LA.SUBNO = @SUBNO
		) AS RE 
		  ON LA.LANE = RE.LANE	
	  WHERE LA.TAIKAINO = @TAIKAINO
		AND LA.KYOGINO = @KYOGINO
		AND LA.ROUNDNO = @ROUNDNO
		AND LA.SUBNO = @SUBNO
) X
WHERE X.RCOMMENT != ''
OPEN @CUR_A ;

-- カーソルで行が取得できる間、ループ
FETCH NEXT FROM @CUR_A INTO @str;
WHILE @@FETCH_STATUS = 0
BEGIN 
	
	--最初は開始位置＝1
	SET @str_s = 1 ;
	--終了位置は'*'が見つかった位置-1
	SET @str_e = charindex(@SEP, @str) -1 ;

	--終了位置が0より大きい('*'が存在している)間ループする
	WHILE @str_e > 0
	BEGIN
		--文字列の切り出しおよび戻りテーブルへデータ追加
		SET @buf = substring(@str, @str_s, @str_e ) ;
		INSERT INTO @retTBL SELECT distinct @buf;

		--次の開始位置を設定('*'の分+1する)
		SET @str_s = @str_s + @str_e + 1 ;
		--次の終了位置を設定
		SET @str_e = charindex(@SEP, @str, @str_s) - @str_s ;
	END ;

	--終了位置を文字列の最後に設定
	SET @str_e = len(@str) ;
	--文字列切り出し
	SET @buf = substring(@str, @str_s, @str_e ) ;
	--戻りテーブルへデータを追加
	INSERT INTO @retTBL SELECT distinct @buf;

	--次行読込
    FETCH NEXT FROM @CUR_A INTO @str ;
END ;

--カーソルクローズ
CLOSE @CUR_A ;

RETURN ;
END ;
GO
